package busterminalweb.action.stoppingpoint;

import busterminal.entity.StoppingPoint;
import busterminal.entity.StoppingPointImplementation;
import busterminal.exception.BusinessException;
import busterminal.persistence.StoppingPointDAO;
import busterminal.services.ServiceLocator;
import busterminalweb.action.Action;
import busterminalweb.action.ActionResult;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Сохранить остановочный пункт
 */
public class SaveStoppingPointAction implements Action {

    /**
     * Регулярное выражение для проверки корректности ввода идентификатора
     */
    private static final String CORRECT_ID_FORMAT = "^[0-9]*$";

    /**
     * Выполнить действие
     * @param request запрос
     * @param response ответ
     * @return страница, которой нужно передать управление
     */
    @Override
    public ActionResult execute(HttpServletRequest request, HttpServletResponse response) {
        if (request.getParameter("saveButton") != null) {
            if (!request.getParameter("id").trim().matches(CORRECT_ID_FORMAT)) {
                throw new BusinessException("Incorrect stopping point id=" + request.getParameter("id").trim());
            }
            int id = Integer.parseInt(request.getParameter("id").trim());
            StoppingPoint stoppingPoint = (id == 0) ? new StoppingPointImplementation() : ServiceLocator.getService(StoppingPointDAO.class).read(id);

            if (request.getParameter("stoppingPointName") != null && !request.getParameter("stoppingPointName").trim().isEmpty()) {
                stoppingPoint.setStoppingPointName(request.getParameter("stoppingPointName").trim());
            } else {
                throw new BusinessException("You should define stopping point name");
            }

            StoppingPointDAO stoppingPointDAO = ServiceLocator.getService(StoppingPointDAO.class);
            if (id != 0) {
                stoppingPointDAO.update(stoppingPoint);
            } else {
                stoppingPointDAO.create(stoppingPoint);
            }
        }

        //список, который нужно загрузить при возврате на главную страницу
        request.getSession().setAttribute("showPage", "stopping-point-list");

        //main - это action, который никак сервлетом не обрабатывается,
        //т.е. открывается главная страница
        return ActionResult.redirect("main");
    }

    /**
     * Получить имя действия
     * @return имя действия
     */
    @Override
    public String getName() {
        return "stopping.point.save";
    }
}
